perm filename GREDX.F4[NEW,LCS]26 blob sn#559306 filedate 1981-01-26 generic text, type T, neo UTF8
C  SUBRS. VLINE, ASKIT, GRED, LPEN, SAVIT, LISTP ***************


	SUBROUTINE VLINE(R3,R4,R5,R6)
	INTEGER ASK
	COMMON /MKX/KSLA,ISEMI,LESS,IGT/A2Z/LAA,LBB,NONO(9),LEL
	COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /IDEV/IDEV
	IF(R5.NE.0)GO TO 66 
267 	IF(IDEV.EQ.5)
	1 CALL TYPSTR('TYPE STAFF #, POS1, POS2 AND CODE #  ')
CRR** NEXT WITH NEW RREAD IN MS.F4   CAN NOW TYPE M 1 0 200 16, ETC.
	READ(IDEV,F78F,END=167)R3,R4,R5,R6
CQQ	ACCEPT F78F,R3,R4,R5,R6
	REREAD FA1,ASK
	IF(ASK.EQ.LESS)GO TO 167
	CALL LO2UP(ASK)
	IF(ASK.NE.IGT)GO TO 2
	IDEV=1
	GO TO 267
2	IF(ASK.EQ.LBB)R3=99
C  99 IS ALSO USED IN MOVER.F4
	IF(R3.GE.99)RETURN
	IF(ASK.NE.LEL)GO TO 66
C  TYPE 'L' FOR LIGHT-PEN
	K=-1
67	R4=RY
	CALL LPEN(R3,RY,RX)
	REREAD FA1,ASK
	CALL LO2UP(ASK)
	IF(ASK.EQ.LBB)R3=99
	IF(R3.GE.99)RETURN
	K=-K
	IF(K.GT.0)GO TO 67
	R5=RY
C LIGHT PEN IS READ TWICE
66	ASK=-1
	IF(R6.LT.100)GO TO 1
	R6=R6-100
C  FOR 'ASK' ADD 100 TO PARAM NUMBER GIVEN.
	ASK=0
1	CALL BOX(-1,R4)
	CALL BOX(-2,R5)
C  PUTS UP TWO VERTICAL LINES
	RETURN
CCC3	FORMAT(' TYPE STAFF #, POS1, POS2 AND CODE #  '$)
167	IDEV=5    
	GO TO 267
	END


	SUBROUTINE ASKIT
	INTEGER ASK
	COMMON /DPY/ST(4000),MEDIT,IGO/A2Z/NONO(6),LGG
	COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK
	COMMON /XRN/RN(1) /KJY/ K,JY
	IGO=0
	CALL DPYNEW
	X=ST(2)
	CALL BOX(JY,RN(JY+2))
	ST(2)=X
  	CALL TYPSTR('N=NO, <CR>=YES, G=GO  ')
	ACCEPT FA1,K
	IF(K.EQ.LGG)ASK=-1
	CALL DPYNEW
	IGO=1
	END

	SUBROUTINE GRED
	INTEGER PWDS
	COMMON /MKX/KSLA,ISEMI,LESS,IGT
	1/A2Z/LAA,LBB,LCC,LDD,NONO(7),LEL,LMM,LNN,NON(9),LXX
	COMMON /DPY/IST(4000),MEDIT,IGO /IDEV/IDEV
	COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /KJY/ K,JY
	COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
	COMMON R2,JA,J,J2,RJQ(6),RC,IZ,RX,KV,RY,IA,IB,C,D,JZ,A,
	1 NX,VY,RB,JQ(20) /XRN/RN(1) /ALF/INP(72),ML
	COMMON /PTR/PWDS(1) /POSI/STFF(8),JJB,POS
	1 /LIMIT/LIMIT,ITEM,L,I,IX
	1 /RINP/R(10,80),RPOS(100) /DPTR/IWDS(1)

	EQUIVALENCE (IST2,IST(2)),(I2,INP(2))
	RC=999
	RSTF=RC
CC **CAN'T GET HERE ***IF(INP(1).NE.'A'.AND.INP(1).NE.'D')GO TO 1
C  LEAVES ROUTINE
	POS=0
C ABOVE FOR NEW RREAD IN MS.
7	CALL VLINE(R2,Z,POS,RX)
C  PUTS UP TWO VERTICAL LINES
	REREAD FA1,NX
	CALL LO2UP(NX)
	IF(NX.EQ.LBB)GO TO 170
	IF(R2.LT.99)GO TO 70
170	JA=98
	RETURN
70	IF(POS.EQ.0)POS=200
C  0,0  DOES WHOLE STAFF
	IF(INP(1).NE.LAA)GO TO 4
267	IF(IDEV.EQ.1)GO TO 467
	CALL TYPSTR(' TYPE P#, CHNG,  P#, CHNG,  P#, CHNG, ...')
	CALL TYPCRL
467	READ(IDEV,F78F,END=167)V
CQQ	ACCEPT F78F,V
	REREAD FA1,K
C  TYPE 'L' FOR LIGHT PEN
	IF(K.EQ.LESS)GO TO 167
	CALL LO2UP(K)
	IF(K.NE.IGT)GO TO 367
	IDEV=1
	GO TO 267
367	IF(V(1).EQ.99)GO TO 7
	IF(K.EQ.LBB)GO TO 7
C TYPE 'B' OR 99 TO BACKUP
	IF(K.NE.LEL)GO TO 66
	DO 67 K=1,2
	V(2)=RY
	CALL LPEN(V(1),RY,RX)
	REREAD FA1,JA
	CALL LO2UP(JA)
	IF(JA.EQ.LBB)GO TO 7
67	IF(V(1).GE.99)GO TO 7
	V(3)=RY
66	JA=0
	IZ=0
C  COUNTER
	GO TO 14
167	IDEV=5
	GO TO 267
4	JA=98
C  DEL=FOR DELETIONS   CD=CENTER DASHES BETWEEN SYLLABLES.
	IF(I2.EQ.LDD)JA=0
C  STF.N, -99    -- DELETES ALL BUT STAFF N.
	IF(Z.NE.-99)GO TO 14
	RSTF=R2
	R2=99
14	NX=0
C  LOOP STARTS HERE
	J=0
140	NX=NX+1
142	JY=PWDS(NX)
	RB=RN(JY+3)
	IF(RTLINE(JY))GO TO 6
	IF(RB.LT.Z)GO TO 6
	IF(RB.GT.POS)GO TO 6
	IF(RN(JY+2).EQ.RSTF)GO TO 6
C  FOR -99 DELETES.
	RB=RN(JY+1)

	IF(I2.NE.LDD)GO TO 71
C NEXT FOR 'CD'  CENTER DASHES WITH TEXT
	IF(RB.NE.4.)GO TO 6
	IF(RN(JY).LT.8.)GO TO 6
C P10 MUST BE .GT.0
	CALL DASHES(ITEM,RN(JY+2),RN(JY+3))
	GO TO 6

71	IF(V(1).EQ.12)GO TO 77
	IF(V(1).EQ.100)GO TO 341
C USE P100 AND ANY CODE# TO CREATE CUES. I.E. MINI NOTES, RESTS, BEAMS.
	IF(RC.EQ.999)GO TO 143
C  USE P12 TO INVERT STEM, BEAM AND SLURS ALL AT ONCE.
C  SET 12 TO 1 WITH CODE 5 TO INVERT SLURS ONLY
77	RC=0
	IF(RB.EQ.5)GO TO 141
	IF(RB.NE.6)GO TO 143
	IF(RX.EQ.1)GO TO 141
143	IF(RX.NE.44.)GO TO 144
C USE CODE 44 FOR ALL 'LINE' EXCEPT BARLINES.
	IF(RB.NE.4)GO TO 6
	IF(RN(JY).LE.2)GO TO 6
	GO TO 100
144	IF(RB.NE.RX.AND.RX.NE.0)GO TO 6
CXX	IF(ASK)GO TO 100
CXX	CALL ASKIT
CXX	IF(K.EQ.LNN)GO TO 6
CXX	IF(K.EQ.LXX)GO TO 19
100	IF(INP(1).EQ.LAA)GO TO 141
	IF(J)GO TO 40
	J=-1
	K=NX
41	IZ=NX
	IF(NX.LT.ITEM)GO TO 140
40	IF(NX-IZ.EQ.1)GO TO 41
C  GO BACK FOR MORE - IF IN RIGHT ORDER.
C  RANGE TO DEL. = K→NX
45	J=IZ+1
	IA=PWDS(K)
	IB=PWDS(J)-IA
	JZ=IWDS(K)
	J2=IWDS(J)-JZ
	J=J-K
	ITEM=ITEM-J
	DO 42 IZ=K,ITEM+1
	PWDS(IZ)=PWDS(IZ+J)-IB
42	IWDS(IZ)=IWDS(IZ+J)-J2
	IST2=IST2-J2
	I=I-IB
	 CALL LOOP(IA,I,1,0,IB,RN)
	CALL LOOP(JZ+2,IST2+2,1,0,J2,IST)
	IF(K.GE.ITEM)GO TO 1
C  EXITS
	NX=K+1
	GO TO 142
341	IF(RB.EQ.6)GO TO 141
	IF(RB.GT.2)GO TO 6
141	IF(IZ.GE.97)GO TO 9
C   THERE'S A LIMIT TO THE R ARRAY    4/18/73
	IZ=IZ+1
C  FOUND AN ITEM
	R(1,IZ)=223
C 223 IS CODE NUMB. FOR EDIT MODE 
	R(2,IZ)=NX
10	IZ=IZ+1
	DO 101 KV=3,10
101	R(KV,IZ)=0
	IF(V(1).NE.100)GO TO 131
231	R(1,IZ)=400
C  MAKES MINI NOTES, RESTS, BEAMS
	R(2,IZ)=100
	GO TO 6
131	IF(RC.EQ.999)GO TO 11
	IF(RB.EQ.1)GO TO 30
31	RC=RN(JY+7)
	IF(RB.EQ.6)GO TO 32
C  NEXT INVERTS DIP
	IF(RX.EQ.1)GO TO 35
	A=-1.6
	RB=-10
	IF(RC)A=-A
CC***????  WHY CHANGE P2???  ****36	R(7,IZ)=2
CC***	R(8,IZ)=RN(JY+2)+A
	GO TO 37
35	RB=-4
	IF(RN(JY+8).LT.-1)RB=-1.4
C  2 AND .7 ARE HGTS SET IN 'BEAMS'
37	IF(RC)RB=-RB
	R(3,IZ)=4
	R(4,IZ)=RN(JY+4)+RB
	R(6,IZ)=RN(JY+5)+RB
	R(5,IZ)=5
33	R(1,IZ)=7
	R(2,IZ)=-RC
	GO TO 6
32	IF(RC.LT.20)GO TO 34
C  THIS IS FOR BEAMS
232	RC=10-RC
	GO TO 33
132	IF(RC.GT.-20)GO TO 232
	GO TO 332
34	IF(RC)GO TO 132
C  P7 IS NEG FOR TREMOLOS
332	RC=-10-RC
	GO TO 33

C  NEXT INVERTS STEMS EITHER WAY. USE ANY #>11 WITH CODE 1 TO INVERT.
C  MUST! BE FIRST IN LIST!!!
C	RC=0
30	RB=RN(JY+5)
	IF(RB.LT.10)GO TO 12
C  NO STEM < 10
	RC=10
	IF(RB.GE.20)RC=-RC
	RB=RB+RC
12	V(1)=5.
	V(2)=RB
C  SO IT WILL DISPLAY RESULT
11	DO 8 K=1,10
8	R(K,IZ)=V(K)
6	IF(J)GO TO 45
	IF(NX.LT.ITEM)GO TO 140
19	IF(INP(1).NE.LAA)GO TO 1
9	R(1,IZ+1)=222
	R(1,IZ+2)=0
CC	REND=-1.
1	CALL HYDPOG(3)
	END

	SUBROUTINE LPEN(A,B,C)
	COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /SIZ/RSZ,JCEN,KCEN
	COMMON /POSI/STFF(0/7),JJ2,POS /ALF/INP(71),M,L /C/MM,LL
	COMMON /A2Z/LAA,LBB,NONO(21),LXX
	M=MM
	L=LL
	IF(IABS(M).GT.512)GO TO 4
	IF(IABS(L).LE.512)GO TO 3
4	M=0
	L=100
3	CALL SETCUR(M,L,0)
	CALL TYPSTR('TYPE <CR> TO SET POINT')
	ACCEPT FA1,JD
	IF(JD.EQ.'9')RETURN
	IF(JD.EQ.LXX)RETURN
C  TYPE 'B' OR 99 TO BACK UP
	IF(JD.EQ.LBB)RETURN
	CALL RDCUR(M,L)
	L=(L+KCEN)/RSZ
1	B=((M+JCEN)/RSZ+596.0)/5.96
C  B=HORIZ. STEP NUM.
	DO 13 K=0,7
	M=STFF(K)+60.
	IF(L.GT.M)GO TO 13
	A=K
C  A=STAFF NUM.
	GO TO 8
13	CONTINUE
8	C=IFIX((L-STFF(K)+21.)/7.+.5)
C  FINDS VERT. NOTE NUM.
	TYPE F78F,A,B
	END


	SUBROUTINE SAVIT
	IMPLICIT INTEGER(A-Q,S-Z)
	COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK/DL/X22,SAVER,NAME,EXT
	1 /POSI/STFF(0/7),JJ2,IPOS /LIMIT/LIMIT,ITEM,L,I,IX 
	1 /SCM/V(78),ISCR,LCNT,IRSTF,LIST(200),REND  /IDEV/IDEV
	1 /ALF/INP(72),ML/XRN/RN(1)/DPY/ST(4000),MEDIT,IGO
	1 /STF/RSTFAC(0/7),RSTJ2 /PTR/PWDS(1) /JCHAR/IXX,ISEMI,IBLA
	COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
	COMMON /A2Z/LAA,LBB,LCC,LDD,NONO(8),LMM,LNN,NON(4),LSS
	DIMENSION SV(128)
	EQUIVALENCE (INP2,INP(2)),(ST2,ST(2)),(SV,LIST)
C  'SAME' WILL REPEAT CURRENT NAME.  BLANK WILL USE TMP.MS
	KX=-1
	K=0
32	K=K+1
C  THIS IS TO REPAIR DAMAGE DONE BY UNKNOWN BUGS!!!!
33	L=PWDS(K)
	IA=PWDS(K+1)
	IB=RN(L)+3.+L
C  THIS SHOULD BE NEW POINTER
	IF(IA-IB.EQ.0)GO TO 36
	IF(RN(IB)+3+IB.NE.PWDS(K+2))GO TO 38
	J=K+1
	PWDS(J)=IB
	CALL TYPSTR('?FIXED UP ITEM ')
	CALL TYPINT(J)
	CALL TYPCRL
	GO TO 36
38	IJ=IA-L
	DO 39 J2=K+1,ITEM
39	PWDS(J2)=PWDS(J2+1)-IJ
	CALL TYPSTR('BAD ITEM--')
	CALL TYPINT(K)
	CALL TYPCRL
	IF(KX.EQ.0)GO TO 50
	CALL TYPSTR('NAME.EXT? ')
	ACCEPT 141,INP
	CALL NAMEXT(INP,NAME,EXT)
C  ONLY DOES THIS ON THE FIRST ERROR
	GO TO 2
50	J=RJ
	KX=0
	CALL LOOP(L,I,1,0,J,RN)
C  REARRANGES DATA
	I=I-J
	ITEM=ITEM-1
	IF(ITEM.LE.K)GO TO 37
	GO TO 33
C  GO BACK AND TRY AGAIN
36	IF(IA.LE.L)GO TO 38
C  JUMP IF PWDS IS OUT OF ORDER
	IF(K.LT.ITEM)GO TO 32
37	KX=-1
	IF(SAVER.GE.0)GO TO 10
	SAVER=5
101	CALL PUTEXT('TMP','MS ')
	GO TO 102
1	FORMAT(I,24F)
2	CALL TYPCHR('WRITE OVER   ',13)
	CALL TYPWRD(NAME)
	CALL TYPCHR('.',1)
	CALL TYPCHR(EXT,3)
	CALL TYPCHR('?  ',3)
	ACCEPT 141,INP
	CALL LULOOP
	IF(INP(1).NE.LNN)GO TO 4
10	IF(INP2.EQ.LMM)GO TO 4
11	L=NAME
	INP(1)=-1
	CALL NAMEXT(INP,NAME,EXT)
	IF(NAME.NE.IBLA)GO TO 40
	CALL TYPSTR('NAME.EXT? ')
	ACCEPT 141,INP   
	CALL NAMEXT(INP,NAME,EXT)
	IF(NAME.EQ.IBLA)GO TO 4
C 99 WILL BACK UP.
	IF(NAME.NE.'99')GO TO 40
	NAME=L
	RETURN
40	IF(NAME.NE.'SAME')GO TO 43
	NAME=L
	GO TO 4
141	FORMAT(72A1)
43	IF(LOOKX(NAME,EXT))GO TO 2
C  JUMP BACK IF FILE NAME ALREADY ON DSK
	IF(IDEV.NE.1)GO TO 4
	CALL TYPWRD(NAME)
	CALL TYPCHR('.',1)
	CALL TYPCHR(EXT,3)
	CALL TYPCRL
4	IF(KX.EQ.0)GO TO 50
	IF(NAME.NE.IBLA)GO TO 41
	NAME=L
	GO TO 101
41	CALL PUTEXT(NAME,EXT)
42	IF(INP2.EQ.LDD)GO TO 202
C   SB=SAVE BIG;  SD=SAVE DPY ONLY; SM=SB WITH SAME NAME
102	IRSTF=0
	IF(INP2.EQ.LBB)IRSTF=-1
	JJ2=ITEM+2
	IPOS=I
C WD CNTS
	CALL EXTOUT(RSTFAC,128)
C  INCLUDES STFF AND V ARRAYS
C***	CALL EXTOUT(PWDS,JJ2)
	CALL EXTOUT(RN,IPOS)
	IF(LCNT.GT.1)CALL EXTOUT(LIST,LCNT)
CC102	WRITE(21)ITEM,I
CC	1,(PWDS(L),L=1,ITEM+1),(RN(L),L=1,I-1),ISCR,(V(L),L=1,ISCR),
CC	1 LCNT,(LIST(L),L=1,LCNT),RSTFAC,STFF,SV
C (SV) FOR FORTRAN READ BUG!!!!
CC	IF(SAVER.GE.0)WRITE(21)RSTFAC,STFF,L
C NOT USED WHEN SAVE IS AUTOMATIC.
C  TAKE OUT ABOVE WHEN BUG IS SOMEDAY FIXED IN F4.
	IF(I.LE.LIMIT)GO TO 20
	CALL TYPSTR('****** TOO MUCH DATA TO PRINT - ')
	CALL TYPINT(I)
	CALL TYPCHR('/',1)
	CALL TYPINT(LIMIT)
20	IF(INP2.EQ.LBB)CALL EXTOUT(ST,4302)
1001	CALL FINEXT
	IF(INP(1).NE.LSS)RETURN
	IF(NAME.NE.IBLA)RETURN
	CALL TYPSTR('DISPLAY SAVED IN "TMP.MS"')
	CALL TYPCRL
C   GO BACK IF THE SAVER WROTE THE FILE
	RETURN
202	WRITE(21),ST2,(ST(L),L=1,ST2+2)
 	GO TO 1001
C   WRITES DPY BUFFER ONLY.
	END

	SUBROUTINE LISTP(LST)
	IMPLICIT INTEGER(A-Q,S-Z)
	DIMENSION LST(1)
	COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND/ALF/I1,I2,I3
	COMMON R2,JA,CENTR,J2,RJQ(20),JQ(16),K,JY,X,Y /XRN/RN(1)
	1 /STF/RSTFAC(0/7),RSTJ2 /LIMIT/LIMIT,ITEM,L,I,IX /PTR/PWDS(1)
	1 /DL/X22,SAVER,NAME,EXT
	EQUIVALENCE (JC,JQ(1)),(JD,JQ(2)),(RJC,RJQ(1)),(RJD,RJQ(2))
	1 ,(RJE,RJQ(3))

	IF(I3.EQ.'X')CALL OFILE(22,NAME)
	JY=5
	IF(RJE.NE.0)JY=3
CC	JD=RJD
C  NO LPT FOR NOW    CC	IF(JD.NE.0)JY=3
CC	DO 6334 L=IFIX(R2),JC
	JD=RJD
	IF(RJC.NE.0)GO TO 1
	RJC=1.
	JD=ITEM
1	DO 6334 L=IFIX(RJC),JD
	X=PWDS(L)
	Y=RN(X)+2+X
C1/81	X=X+1
C1/81	K=RN(X)
	JK=RN(X+1)
	JL=RN(X+2)
	X=X+3
	IF(I3.NE.'X')GO TO 2
C TYPE 'PRX' TO CREATE 'READ' FILE WITH ALL PARAMS.
	IF(JK.NE.16)WRITE(22,3)JK,JL,(RN(K),K=X,Y)
C1/81  	WRITE(22,3)(RN(K),K=X,Y)
	IF(JK.EQ.16)WRITE(22,33)JK,JL,(RN(K),K=X,Y)
	GO TO 6334
3	FORMAT(2I2,F8.2,F9.2,8F7.2)
33	FORMAT(I2,I3,3F8.2,3F10.0,F7.2,F5.2)
C* NOTICE -- WRITES LINES WHICH ARE TOO LONG! - THEY MUST BE EDITED.
2	WRITE(JY,6333)L,LST(JK),JK,JL,(RN(K),K=X,Y)
C1/81  2	WRITE(JY,6333),L,LST(K),(RN(K),K=X,Y)
6334	CONTINUE
C  P, N1, N2, N3  TYPES ITEM LIST. N1=1ST, N2=LAST, N3=TO LPT?
C  LEAVE THIS HERE SO WRITE(JY, OF R IS POSSIBLE IN DDT
6333	FORMAT(I4,') ',A5,I3,I2,F8.2,2F8.2,3F12.2,4F8.2)
C1/81  6333	FORMAT(I4,') ',A5,2F4.0,F8.3,F8.2,7F10.2)
	IF(I3.NE.'X')RETURN
	END FILE 22
C WRITES 'FOR22.DAT'
C1/81	CALL TYPSTR('PARAMS WRITTEN ON FOR22.DAT')
	CALL TYPSTR('PARAMS WRITTEN ON ')
	CALL TYPCHR(NAME,5)
	CALL TYPSTR('.DAT')
	CALL TYPCRL
	END